GPX: Fix a problem made more obvious by GZIP reader involving reads slightly larger...
authorrobertl <robertl>
Mon, 27 Nov 2006 20:22:41 +0000 (20:22 +0000)
committerrobertl <robertl>
Mon, 27 Nov 2006 20:22:41 +0000 (20:22 +0000)
Util: eliminate use of va_copy.

gpx.c
util.c

diff --git a/gpx.c b/gpx.c
index 6551d01dfee85bb591daacbafa9eb8a5ec1768d1..12650afef30f631c271c2c87d51930493dc64cbe 100644 (file)
--- a/gpx.c
+++ b/gpx.c
@@ -1227,7 +1227,11 @@ gpx_read(void)
                        int maxentlength = 8;
                        len = gbfread(buf, 1, MY_CBUF_SZ - maxentlength, fd);
                        done = gbfeof(fd) || !len;
+// fprintf(stderr, "%d/%d\n", len, done);
                        buf[len] = '\0';
+                       if (len < maxentlength) {
+                               maxentlength = len;
+                       }
                        badchar = buf+len-maxentlength;
                        badchar = strchr( badchar, '&' );
                        extra = maxentlength - 1; /* for terminator */
diff --git a/util.c b/util.c
index 9259e5ea639c9a963429645b251c7247237413c3..2dc7ed9b9207c4e098911d04654d82b39e15b094 100644 (file)
--- a/util.c
+++ b/util.c
@@ -291,7 +291,7 @@ xfputs(const char *errtxt, const char *s, FILE *stream)
  */
 
 int
-xvasprintf(char **strp, const char *fmt, va_list args)
+xasprintf(char **strp, const char *fmt, ...)
 {
        /* From http://perfec.to/vsnprintf/pasprintf.c */
 /* size of first buffer malloc; start small to exercise grow routines */
@@ -301,7 +301,7 @@ xvasprintf(char **strp, const char *fmt, va_list args)
        char *newbuf;
        size_t nextsize = 0;
        int outsize;
-       va_list tmp;
+       va_list args;
 
        bufsize = 0;
        for (;;) {
@@ -320,9 +320,9 @@ xvasprintf(char **strp, const char *fmt, va_list args)
                        return -1;
                }
 
-               va_copy(tmp, args);
-               outsize = vsnprintf(buf, bufsize, fmt, tmp);
-               va_end(tmp);
+               va_start(args, fmt);
+               outsize = vsnprintf(buf, bufsize, fmt, args);
+               va_end(args);
                
                if (outsize == -1) {
                        /* Clear indication that output was truncated, but no
@@ -364,20 +364,6 @@ xvasprintf(char **strp, const char *fmt, va_list args)
        return 0;
 }
 
-int
-xasprintf(char **strp, const char *fmt, ...)
-{
-       va_list args;
-       int rval;
-
-       va_start(args, fmt);
-       rval = xvasprintf(strp, fmt, args);
-       va_end(args);
-
-       return rval;
-       
-}
-
 /* 
  * Duplicate a pascal string into a normal C string.
  */